/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Almacenamiento;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Grover
 */
public class Serializador {
    // Escribe un objecto en un archivo
	private ObjectOutputStream escritorArchivo = null;
 
	// Lee un objecto que este guardado en un archivo
	private ObjectInputStream lectorArchivo = null;
 
	private Map<String, Integer> hashmap = new HashMap<>();
 
	private static int con = 0;
 
	// Al metodo le pasamos el objeto que queremos serializar y lo guardará en el archivo que se le especifique al FileOutputStream (en este caso "objeto.mio")
	public void escribirArchivo(Object objeto){
		try{
			if(escritorArchivo == null)
				escritorArchivo = new ObjectOutputStream(new FileOutputStream("d:/prueba/Archivo.ser"));
			escritorArchivo.writeObject(objeto);
			hashmap.put(((EntradaCatalogo)objeto).getNombreTabla(), con++);
		} catch(FileNotFoundException fnfex){
			fnfex.printStackTrace();
		} catch(IOException ioex){
			ioex.printStackTrace();
		}
	}
 
	public Object leerArchivo(String rutaArchivo) {
		EntradaCatalogo entrada = null;
		try{
			if(lectorArchivo == null)
				lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
			while(true){
				entrada = (EntradaCatalogo) lectorArchivo.readObject();
				System.out.println(entrada.toString());
			}
		}catch(EOFException ex)
		{
			System.out.println("\nFinal de archivo");
		}catch (ClassNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();		
		}		
		return entrada;
	}
 
	public Object leerArchivo(String rutaArchivo, String nombre) {
		EntradaCatalogo entrada = null;
		int contador = 0;
		try{	
			lectorArchivo = new ObjectInputStream(new FileInputStream(rutaArchivo));
			if(hashmap.get(nombre)!= null){
				int numero = hashmap.get(nombre).intValue();
				while(contador <= numero){
					entrada = (EntradaCatalogo) lectorArchivo.readObject();	
					contador++;
				}
				System.out.println(entrada.toString());
			}
			else{
				System.out.println("El nombre no se encuentra en el archivo");
			}
			lectorArchivo.close();
		}catch(EOFException ex)
		{
			System.out.println("\nFinal de archivo");
		}catch (ClassNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();		
		}
 
		return entrada;
	}
}
